﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using DAL;
using BLL;
using BOL;
using DevComponents.DotNetBar;
using DevComponents.AdvTree;

namespace QuanLyHangXeKhach
{
    public partial class frmThongTinTuyenDuong : UserControl
    {
        TraCuuTuyenDuong tctd = new TraCuuTuyenDuong();
        CapNhatGiaTuyen cngt = new CapNhatGiaTuyen();
        DieuKhien dk = new DieuKhien();

        public frmThongTinTuyenDuong()
        {
            InitializeComponent();
        }

        #region Điều khiển đóng/mở form
        private DieuKhien _Commands;
        /// <summary>
        /// Gets or sets the commands associated with the control.
        /// </summary>
        public DieuKhien Commands
        {
            get { return _Commands; }
            set
            {
                if (value != _Commands)
                {
                    DieuKhien oldValue = _Commands;
                    _Commands = value;
                    OnCommandsChanged(oldValue, value);
                }
            }
        }
        /// <summary>
        /// Called when Commands property has changed.
        /// </summary>
        /// <param name="oldValue">Old property value</param>
        /// <param name="newValue">New property value</param>
        protected virtual void OnCommandsChanged(DieuKhien oldValue, DieuKhien newValue)
        {
            if (newValue != null)
            {
                btndong.Command = newValue.dongfrmtttuyendg;
            }
            else
            {
                btndong.Command = null;
            }
        }

        #endregion

        private int dem = 0; //Biến đếm cho các Label
        private Label[] sochongoi = new Label[100]; //Mảng để đón nhận các Label được tạo                

        public void vemohinhxe(int socho)
        {
            this.groupBox1.Controls.Clear();
            Label taixe = new Label();       
            taixe.Text = "Tài xế";
            taixe.Left = 15;
            taixe.Top = 25;            
            taixe.BackColor = System.Drawing.Color.LightBlue;
            taixe.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
            taixe.Size = new System.Drawing.Size(40, 15);
            taixe.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
            taixe.Font = new System.Drawing.Font("Microsoft Sans Serif", 6.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(163)));            
            this.groupBox1.Controls.Add(taixe);   

            int i; //Biến này để tạo vòng lặp cho số lượng Label
            int btLeft = 15; // Thuộc tính left cho label đầu tiên
            int btTop = 55; //thuộc tính top cho label đầu tiên
            for (i = 0; i < socho; i++)
            {
                //Tạo các button mới
                Label NewLabel = new Label();
                //Tạo các thuộc tính cho Button               
                dem += 1;
                NewLabel.Name = Convert.ToString(dem);
                NewLabel.Text = "";
                NewLabel.Left = btLeft;
                NewLabel.Top = btTop;
                NewLabel.TabIndex = i;
                NewLabel.BackColor = System.Drawing.Color.LightBlue;
                NewLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
                NewLabel.Size = new System.Drawing.Size(20, 20);
                NewLabel.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
                NewLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 6.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(163)));
                NewLabel.Text = (i + 1).ToString();
                this.groupBox1.Controls.Add(NewLabel);                
                //Tạo các label có khoảng với nhau thành các nhóm 2 label
                if (dem % 2 == 0)
                {
                    btLeft = btLeft + 40;
                }
                else
                {
                    btLeft = btLeft + 20;
                }
                //Được 4 label rồi thì xuống dòng thôi                
                if (dem % 4 == 0)
                {
                    btTop = btTop + 20;
                    btLeft = 15;
                }                
                //Đưa các label vào mảng các label
                sochongoi[dem] = NewLabel;
                //Khoá tất cả các label lại
                sochongoi[dem].Enabled = false;
            }
        }
        private void frmThongTinTuyenDuong_Load(object sender, EventArgs e)
        {
            this.labelX1.BackColor = System.Drawing.Color.Red;            
            this.labelX1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
            this.labelX1.Location = new System.Drawing.Point(748, 27);
            this.labelX1.Name = "labelX1";
            this.labelX1.Size = new System.Drawing.Size(20, 20);

            this.labelX2.BackColor = System.Drawing.Color.LightBlue;            
            this.labelX2.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
            this.labelX2.Location = new System.Drawing.Point(748, 53);
            this.labelX2.Name = "labelX2";
            this.labelX2.Size = new System.Drawing.Size(20, 20);

            //dataGridViewX1.DataSource = tctd.laytuyenchitiet("TD001", "XE002", DateTime.Parse("8/8/2013"), 2);
            cobtuyenduong.DataSource = cngt.laytuyen();
            cobtuyenduong.DisplayMember = "ten";
            cobtuyenduong.ValueMember = "ma";
            cobtuyenduong.Text = "";            
            xoatrang();
           
        }

        
        private void cobtuyenduong_SelectedIndexChanged(object sender, EventArgs e)
        {
            //dtngaydi.Text = "";
            xoatrang();
            lbltuyenduong.Text = cobtuyenduong.Text;
            if (dtngaydi.Text != "")
            {
                lblngaydi.Text = dtngaydi.Value.ToString("MM/dd/yyyy");
                Loadfrm();
            }
        }


        public void xoatrang()
        {
            lblbienso.Text = "";
            lbldiemdungchan.Text = "";
            lblgiave.Text = "";
            lblgiodi.Text = "";
            lblngaydi.Text = "";
            lblsochongoi.Text = "";
            lbltentaixe.Text = "";
            lbltenxe.Text = "";
            lblthoigianchay.Text = "";
            lbltuyenduong.Text = "";
            this.groupBox1.Controls.Clear();
        }

        private void dtngaydi_ValueChanged(object sender, EventArgs e)
        {
            if (cobtuyenduong.Text == "")
            {
                MessageBoxEx.Show("chọn một tuyến đường để tra cứu", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                dtngaydi.Text = "";
            }
            else if (dtngaydi.Value < System.DateTime.Now)
            {
                MessageBoxEx.Show("chọn ngày khác lớn hơn hoặc bằng ngày hiện tại", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                dtngaydi.Text = "";
            }
            else
            {
                xoatrang();
                lbltuyenduong.Text = cobtuyenduong.Text;
                lblngaydi.Text = dtngaydi.Value.ToString("MM/dd/yyyy");
                Loadfrm();

            }
        }

        private void Loadfrm()
        {
            List<thongtintuyenduongtheongay> thongtin = tctd.laytuyenngay(cobtuyenduong.SelectedValue.ToString(), dtngaydi.Value);
            advTree1.Nodes.Clear();
            foreach (var row in thongtin)
            {
                advTree1.Nodes.Add(CreatenoidenRow(row.giodi.ToString(), row.thoigianchay.ToString(), row.maxe, row.bienso, row.socho.ToString()));
            }
        }

        private Node CreatenoidenRow(string tgkhoihanh, string thoigianchay, string maxe, string bienso, string sochongoi)
        {
            Node node = new Node(tgkhoihanh);
            node.Cells.Add(new Cell(thoigianchay));
            node.Cells.Add(new Cell(maxe));
            node.Cells.Add(new Cell(bienso));
            node.Cells.Add(new Cell(sochongoi));
            return node;
        }

        private void advTree1_AfterNodeSelect(object sender, AdvTreeNodeEventArgs e)
        {
            
            try
            {
            
                Node node = e.Node;                
                List<thongtintuyenduongchitiet> tdct = tctd.laytuyenchitiet(cobtuyenduong.SelectedValue.ToString(), node.Cells[2].Text, DateTime.Parse(dtngaydi.Text),int.Parse(node.Cells[0].Text));
                foreach (var row in tdct)
                {
                    lblgiodi.Text = row.giodi + "h";
                    lblthoigianchay.Text = row.thoigianchay + " phút";
                    lbltenxe.Text = row.tenxe;
                    lblbienso.Text = row.bienso;
                    lbltentaixe.Text = row.tentaixe;
                    lblsochongoi.Text = row.sochongoi;
                    lbldiemdungchan.Text = row.diemdungchan;
                    lblgiave.Text = String.Format("{0:0,0 vnđ}", int.Parse(row.giave));
                    vemohinhxe(int.Parse(row.sochongoi));                   
                }

                //tô màu cho mô hình
                List<ghedadat> ghefull = tctd.layghedat(cobtuyenduong.SelectedValue.ToString(), node.Cells[2].Text, DateTime.Parse(dtngaydi.Text), int.Parse(node.Cells[0].Text));
                for (int t = 0; t < int.Parse(lblsochongoi.Text); t++)
                {
                    int k = int.Parse(sochongoi[t+1].Text);
                    //MessageBox.Show(k.ToString());
                    foreach (var row1 in ghefull)
                    {
                        if (row1.ghe == k)
                        {
                            //MessageBox.Show(k.ToString());
                            sochongoi[t+1].BackColor = System.Drawing.Color.Red;
                            break;
                        }
                    }
                }
            }
            catch (Exception) { }
        }

        private void button1_Click_1(object sender, EventArgs e)
        {

        }

        
        
    }
}
